objx.fn.is = function() {

	var passed = true;

	if (arguments.length === 1) {
	
		var objType = this.type();
	
		switch (arguments[0].toString()) {
		
			/*
			 *  Type descriptions
			 */
			case "string":
			case "number":
			case "boolean":
			case "function":
			case "object":
				passed = (objType == arguments[0].toString());
				break;
				
			/*
			 *  Special descriptions
			 */
			case "array":
				passed = (typeof this.obj().length != "undefined");
				break;

			case "something":
			
				var obj = this.obj();
			
				passed = (objType !== "undefined" && obj !== null);
				
				switch (objType) {
					case "string":
						passed = obj !== "";
						break;
					case "number":
						passed = obj !== 0;
						break;
				}
				
				break;
			
			/*
			 *  We don't know what you mean!?
			 */
			default:
				objx.error(".is() doesn't know what \"" + arguments[0].toString() + "\" is.  Remember that the descriptions are case sensitive.");
				break;
		}
	
	} else {
	
		if (!objx.provided("objx.each")) {
			objx.error("is", "Must include \"objx.each\" in order to support multiple argument overload of 'objx.is'.");
		}
	
		// handle each argument
		objx(arguments).each(
		
			// use bind to assign the first parameter
			objx.bind(
			
				// function to call .is() for each argument
				function(context, o) {
				
					// capture the 'passed' value
					passed = context.is(o);
					
					// return passed - to cancel the iteration if 'false'
					return passed;
					
				}, 
				
				// we dont care about binding context, just arguments
				null, 
				
				// the first argument should be this context
				this)
				
		);
		
	}

	return passed;

};

objx.provides("objx.is");